package dao.jdbc.SqlServer;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.Calendar;

import dao.intefaces.InterfaceAgendaDAO;
import entidades.Cita;

public class AgendaDAO implements InterfaceAgendaDAO
{
	private static AgendaDAO instancia = null;
	
	public static AgendaDAO getInstancia()
	{
		if (instancia == null){
			instancia = new AgendaDAO();
		}
		return instancia;
	}
	
	// Metodos
	@SuppressWarnings("deprecation")
	@Override
	public void grabarCita(Cita nuevaCita) {
		// TODO Auto-generated method stub
		PreparedStatement stmt = null;
		try{
			String query = "INSERT INTO AGENDA VALUES (?," + "'"+nuevaCita.getfechaInicio().getTime().toLocaleString()+"'"+ ",?, ?," + "'" + nuevaCita.getFechaFin().getTime().toLocaleString()+"'"+")";
			Connection conexion = DataSource.obtenerConexion();
			conexion.setAutoCommit(false);

			stmt = conexion.prepareStatement(query);
			stmt.setInt(1, nuevaCita.getNroDocumento());
			stmt.setString(2, nuevaCita.getDescripcion());
			stmt.setString(3, nuevaCita.getDomicilio());
			
			stmt.execute();
			conexion.commit();
		}catch(Exception e){
			DataSource.rollback();
			e.printStackTrace();
		}finally{
			DataSource.cerrarConexion(stmt);
		}
	}

	@SuppressWarnings("deprecation")
	public Cita ObtenerCita(int nroPresupuesto) {
		// TODO Auto-generated method stub
		Cita citaBuscada = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try{
			Connection con = DataSource.obtenerConexion();
			String query = "SELECT * FROM AGENDA WHERE NROPRESUPUESTO = " + nroPresupuesto + ";";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()){
				citaBuscada = new Cita();
				
				citaBuscada.setNroDocumento(nroPresupuesto);
				citaBuscada.setDescripcion(rs.getString("descripcion"));
				citaBuscada.setDomicilio(rs.getString("lugar"));
				
				Timestamp fechaInicio = rs.getTimestamp("fechaInicio");
				Calendar inicio = Calendar.getInstance();
				inicio.set(fechaInicio.getYear(), fechaInicio.getMonth(), fechaInicio.getDate(), fechaInicio.getHours(), fechaInicio.getMinutes());
				
				Timestamp fechaFin = rs.getTimestamp("fechaFin");
				Calendar fin = Calendar.getInstance();
				fin.set(fechaFin.getYear(), fechaFin.getMonth(), fechaFin.getDate(), fechaFin.getHours(), fechaFin.getMinutes());
				
				/*
				//Aca realizo manejo para conversion Date -> Calendar
				Date fechaInicio = rs.getDate("fechaInicio");
				Calendar inicio = Calendar.getInstance();
				inicio.set(fechaInicio.getYear(), fechaInicio.getMonth(), fechaInicio.getDate(), fechaInicio.getHours(), fechaInicio.getMinutes());
				
				Date fechaFin = rs.getDate("fechaFin");
				Calendar fin = Calendar.getInstance();
				fin.set(fechaFin.getYear(), fechaFin.getMonth(), fechaFin.getDate(), fechaFin.getHours(), fechaFin.getMinutes());
				*/
				citaBuscada.setfechaInicio(inicio);
				citaBuscada.setFechaFin(fin);
				
			}
		} catch(Exception e){
			e.printStackTrace();
		} finally {
			DataSource.cerrarConexion(rs, stmt);
		}
		return citaBuscada;
	}

	@SuppressWarnings("deprecation")
	@Override
	public void actualizarCita(Cita citaActualizada) {
		// TODO Auto-generated method stub
		PreparedStatement stmt = null;
		try{
			Connection conexion = DataSource.obtenerConexion();
			String query = "UPDATE AGENDA SET FECHAINICIO = " + "'"+citaActualizada.getfechaInicio().getTime().toLocaleString() +"'" + 
			", DESCRIPCION = ?, LUGAR = ?, " +
			"FECHAFIN = "+ "'"+citaActualizada.getFechaFin().getTime().toLocaleString()+"'" +
					"WHERE nroPresupuesto = ?";
			conexion.setAutoCommit(false);

			stmt = conexion.prepareStatement(query);
			stmt.setString(1, citaActualizada.getDescripcion());
			stmt.setString(2, citaActualizada.getDomicilio());
			stmt.setInt(3, citaActualizada.getNroDocumento());

			stmt.execute();
			conexion.commit();
		}catch(Exception e){
			DataSource.rollback();
			e.printStackTrace();
		}finally{
			DataSource.cerrarConexion(stmt);
		}
	}

	public boolean existeCita(int nroPresupuesto) {
		// TODO Auto-generated method stub
		return false;
	}

}